package com.dtwave.wechat.service.provider.web.wx;

import com.dtwave.dubbo.DubboResult;
import com.dtwave.wechat.service.provider.core.wx.*;
import com.dtwave.wechat.service.provider.service.IWeChatInterfaceService;
import com.dtwave.wechat.service.provider.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @Auther: liuwenxiang
 * @Date: 2019/2/23 17:37
 * @Description:
 */
@CrossOrigin(maxAge = 3600)
@Controller
@RequestMapping("${url.common.path}/qywx")
public class WeChatInterfaceController extends BaseController {


    @Autowired
    IWeChatInterfaceService weChatInterfaceService;

    @Autowired
    WeiXinProperties weiXinProperties;

    @Value("${spring.resources.static-locations}")
    private  String fileDir;

    /**
     * 微信:主调接口
     * @Title: getSimpleList
     * @Description: 同步企业微信的通讯录到后台系统
     * @author user
     * @return void
     * @throws
     * * access_token 	是 	调用接口凭证
        department_id 	是 	获取的部门id   hindsight
        fetch_child 	否 	1/0：是否递归获取子部门下面的成员   1
        status 	否 	0获取全部员工，1获取已关注成员列表，2获取禁用成员列表，4获取未关注成员列表。status可叠加  0
     */
    @RequestMapping(value = "/getSimpleList", method = { RequestMethod.GET, RequestMethod.POST })
    public void getSimpleList(HttpServletRequest request, HttpServletResponse response) {
        /**
         * 设计思路：用户，角色，组织
         * 1.现在设计的是一个用户只从属于一个组织，当一个用户从属多个组织的时候，需要创建多个用户。
         * 2.用户，角色，资源（菜单，权限）决定了功能和菜单权限。用户，组织决定了数据权限。
         * 3.此系统的组织和用户都是从企业微信的通讯录导入，不允许后台添加（可修改）。
         */
        //同步微信企业号通讯录
        weChatInterfaceService.synchTxl();
    }



    /**
     *
     * @Title: getWxConfig
     * @Description: 获取微信的配置信息，实现前端js调用微信
     * @author user
     * @return void
     * @throws
     * @date 2017年11月18日 上午12:15:30
     */
    @RequestMapping(value = "/getWxConfig", method = { RequestMethod.GET, RequestMethod.POST })
    @ResponseBody
    public DubboResult getWxConfig(@RequestParam String  userId, @RequestParam String  url, HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map<String,Object> map=new HashMap<String,Object>();
        try {
            Map<String, Object> map1 = WeiXinMethodUtil.getWxConfig(url,request,WeiXinMakeToken.accessToken_txl,weiXinProperties.getCropid());
            map.put("data", map1);
            map.put("success", true);
            map.put("msg", "成功");
        }catch (Exception e){
            map.put("success", false);
            map.put("msg", "失败");
            logger.error("获取微信配置信息异常:",e);
        }
        return DubboResult.buildSuccessResult(map);
    }




    /**
     * 微信:回调接口
     * @Description: 在企业微信后台创建自建应用，设置回调接口getUserIdByCode，回调时，后台获取code，并通过code获取微信当前用户的用户id
     * @param request
     * @param response
     * @throws IOException
     */
    @RequestMapping(value = "/getUserIdByCode", method = { RequestMethod.GET, RequestMethod.POST })
    @ResponseBody
    public DubboResult getUserIdByCode(@RequestParam String  code,HttpServletRequest request, HttpServletResponse response) throws  IOException {
        Map<String,Object> map=new HashMap<String,Object>();
        String UserID ="";
        try {
            if (!"authdeny".equals(code)) {
                UserID = WeiXinMethodUtil.GetUserID(WeiXinMakeToken.accessToken_tztb.getToken(), code, String.valueOf(weiXinProperties.getAppid_tztb()));
            }
            map.put("data", UserID);
            map.put("success", true);
            map.put("msg", "成功");
        }catch (Exception e){
            map.put("success", false);
            map.put("msg", "失败");
            logger.error("获取UserId异常:",e);
        }
        return DubboResult.buildSuccessResult(map);
    }


    /**
     * 微信:语音文件下载
     * @Description: 在移动端，进行录音，会将音频文件存放在微信服务器，微信服务器返回一个mediaId，通过mediaId将微信服务器的文件下载到后台服务器。
     * @param mediaId 微信端音频id
     * @param type  应用类型
     * @param request
     * @param response
     *  返回语音文件的服务器存储地址
     */
    @RequestMapping(value = "/wxVoiceDownload", method = { RequestMethod.GET, RequestMethod.POST })
    @ResponseBody
    public DubboResult wxVoiceDownload(@RequestParam String mediaId,@RequestParam String type, HttpServletRequest request,HttpServletResponse response){
        Map<String,Object> map=new HashMap<String,Object>();
        try {
            String data = weChatInterfaceService.getWxAmr(mediaId,type,request);
            map.put("data", data);
            map.put("success", true);
            map.put("msg", "成功");
        }catch (Exception e){
            map.put("success", false);
            map.put("msg", "失败");
            logger.error("语音下载异常:",e);
        }
        return DubboResult.buildSuccessResult(map);
    }





}
